home *** CD-ROM | disk | FTP | other *** search
/ Ham Radio 2000 / Ham Radio 2000.iso / ham2000 / satellit / orbits / sgp4_pl2 / sgp_conv.pas < prev    next >
Pascal/Delphi Source File  |  1992-09-03  |  2KB  |  83 lines

  1. Unit SGP_Conv;
  2. {           Author:  Dr TS Kelso }
  3. { Original Version:  1991 Oct 30}
  4. { Current Revision:  1992 Sep 03}
  5. {          Version:  1.00 }
  6. {        Copyright:  1992, All Rights Reserved }
  7. {$N+}
  8.  
  9. INTERFACE
  10.   Uses SGP_Math;
  11.  
  12. Procedure Convert_Satellite_Data(arg : integer);
  13. Procedure Convert_Sat_State(var pos,vel : vector);
  14.  
  15. IMPLEMENTATION
  16.   Uses Support,
  17.        SGP_Intf,
  18.        SGP_Init,SGP_Time;
  19.  
  20. Procedure Convert_Satellite_Data(arg : integer);
  21.   var
  22.     iexp,ibexp                 : integer;
  23.     a1,ao,del1,delo,xnodp,temp : double;
  24.     abuf                       : two_line;
  25.   begin
  26.   abuf := sat_data[arg];
  27. {* Decode Card 1 *}
  28.   catnr    := Copy(abuf[1],3,5);
  29.   epoch    := Real_Value(abuf[1],19,14);
  30.   julian_epoch := Julian_Date_of_Epoch(epoch);
  31.   xndt2o   := Real_Value(abuf[1],34,10);
  32.   xndd6o   := Real_Value(abuf[1],45,6)*1E-5;
  33.   iexp     := Integer_Value(abuf[1],51,2);
  34.   bstar    := Real_Value(abuf[1],54,6)*1E-5;
  35.   ibexp    := Integer_Value(abuf[1],60,2);
  36.   elset    := ThreeDigit(Integer_Value(abuf[1],66,3));
  37. {* Decode Card 2 *}
  38.   xincl    := Real_Value(abuf[2],9,8);
  39.   xnodeo   := Real_Value(abuf[2],18,8);
  40.   eo       := Real_Value(abuf[2],27,7)*1E-7;
  41.   omegao   := Real_Value(abuf[2],35,8);
  42.   xmo      := Real_Value(abuf[2],44,8);
  43.   xno      := Real_Value(abuf[2],53,11);
  44. { period   := 1/xno; }
  45. {* Convert to proper units *}
  46.   xndd6o   := xndd6o*Power(10.0,iexp);
  47.   bstar    := bstar*Power(10.0,ibexp)/ae;
  48.   xnodeo   := Radians(xnodeo);
  49.   omegao   := Radians(omegao);
  50.   xmo      := Radians(xmo);
  51.   xincl    := Radians(xincl);
  52.   xno      := xno*twopi/xmnpda;
  53.   xndt2o   := xndt2o*twopi/Sqr(xmnpda);
  54.   xndd6o   := xndd6o*twopi/Cube(xmnpda);
  55. {* Determine whether Deep-Space Model is needed *}
  56.   a1 := Power(xke/xno,tothrd);
  57.   temp := 1.5*ck2*(3*Sqr(Cos(xincl))-1)/Power(1 - eo*eo,1.5);
  58.   del1 := temp/(a1*a1);
  59.   ao := a1*(1 - del1*(0.5*tothrd + del1*(1 + 134/81*del1)));
  60.   delo := temp/(ao*ao);
  61.   xnodp := xno/(1 + delo);
  62.   if (twopi/xnodp >= 225) then
  63.     ideep := 1
  64.   else
  65.     ideep := 0;
  66.   iflag := 1;
  67.   end; {Procedure Convert_Satellite_Data}
  68.  
  69. Procedure Convert_Sat_State(var pos,vel : vector);
  70.   var
  71.     i : byte;
  72.   begin
  73.   for i := 1 to 3 do
  74.     begin
  75.     pos[i] := pos[i]*xkmper;    {kilometers}
  76.     vel[i] := vel[i]*xkmper/60; {kilometers/second}
  77.     end; {for i}
  78.   Magnitude(pos);
  79.   Magnitude(vel);
  80.   end; {Procedure Convert_Sat_State}
  81.  
  82. end.
  83.